package cz.stv.kucera_tomas_jun.auto;
import cz.stv.pecinovsky.správceplátna.*;
import cz.stv.pecinovsky.utility.*;

/* Soubor je ulozen v kodovani UTF-8.
 * Kontrola kódování: Příliš žluťoučký kůň úpěl ďábelské ódy. */


import org.junit.After;
import org.junit.Before;
import org.junit.Test;


import static org.junit.Assert.*;



/*******************************************************************************
 * Testovací třída {@code Auto4Test} slouží ke komplexnímu otestování
 * třídy {@link Auto4Test}.
 *
 * @author    jméno autora
 * @version   0.00.000
 */
public class Auto4Test
{
    private SprávcePlátna SP;
    private Auto4 auto41;
    private Přesouvač presouvac1;




    //== KONSTANTNÍ ATRIBUTY TŘÍDY =============================================
    //== PROMĚNNÉ ATRIBUTY TŘÍDY ===============================================
    //== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ====================
    //== KONSTANTNÍ ATRIBUTY INSTANCÍ ==========================================
    //== PROMĚNNÉ ATRIBUTY INSTANCÍ ============================================
    //== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ====================================
    //== OSTATNÍ NESOUKROMÉ METODY TŘÍDY =======================================

    //##########################################################################
    //== KONSTRUKTORY A TOVÁRNÍ METODY =========================================
    //-- Testovací třída vystačí s prázdným implicitním konstruktorem ----------
    //== PŘÍPRAVA A ÚKLID PŘÍPRAVKU ============================================

    /***************************************************************************
     * Inicializace předcházející spuštění každého testu a připravující tzv.
     * přípravek (fixture), což je sada objektů, s nimiž budou testy pracovat.
     */
    @Before
    public void setUp()
    {
        SP = SprávcePlátna.getInstance();
        SP.odstraňVše();
        SP.setRozměr( 10, 10);
        presouvac1 = new Přesouvač(5);
        auto41 = new Auto4();
        SP.přidej(auto41);
        Řadič ovladac = new Řadič( auto41);
        IO.zpráva( "ok");
    }


    /***************************************************************************
     * Úklid po testu - tato metoda se spustí po vykonání každého testu.
     */
    @After
    public void tearDown()
    {
    }



    //== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =================================
    //== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ====================================
    //== SOUKROMÉ A POMOCNÉ METODY TŘÍDY =======================================
    //== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ====================================
    //== INTERNÍ DATOVÉ TYPY ===================================================
    //== VLASTNÍ TESTY =========================================================
    //
    //     /********************************************************************
    //      *
    //      */
    //     @Test
    //     public void testXxx()
    //     {
    //     }

    @Test
    public void testVlevo()
    {
        auto41.vlevoVbok();
    }

    @Test
    public void testVpravo()
    {
        auto41.vpravoVbok();
    }

    @Test
    public void testVlevo2()
    {
        auto41.vpred();
        IO.čekej( 1000);
        auto41.vlevoVbok();
        IO.čekej( 1000);
        auto41.vpred();
        IO.čekej( 1000);
        auto41.vlevoVbok();
        IO.čekej( 1000);
        auto41.vpred();
        IO.čekej( 1000);
        auto41.vlevoVbok();
        IO.čekej( 1000);
        auto41.vpred();
    }

        @Test
    public void testVpravo2()
    {
        auto41.vpred();
        IO.čekej( 1000);
        auto41.vpravoVbok();
        IO.čekej( 1000);
        auto41.vpred();
        IO.čekej( 1000);
        auto41.vpravoVbok();
        IO.čekej( 1000);
        auto41.vpred();
        IO.čekej( 1000);
        auto41.vpravoVbok();
        IO.čekej( 1000);
        auto41.vpred();
    }

    @Test
    public void testVlevo4x()
    {
        auto41.vlevoVbok();
        IO.čekej( 1000);
        auto41.vlevoVbok();
        IO.čekej( 1000);
        auto41.vlevoVbok();
        IO.čekej( 1000);
        auto41.vlevoVbok();
    }

        @Test
    public void testVpravo4x()
    {
        auto41.vpravoVbok();
        IO.čekej( 1000);
        auto41.vpravoVbok();
        IO.čekej( 1000);
        auto41.vpravoVbok();
        IO.čekej( 1000);
        auto41.vpravoVbok();
    }

    @Test
    public void testVpred1()
    {
        presouvac1.přesunNa(150, 30, auto41);
        auto41.vpravoVbok();
        presouvac1.přesunNa(150, 150, auto41);
                auto41.vpravoVbok();
        presouvac1.přesunNa( 20, 150, auto41);
                auto41.vpravoVbok();
        presouvac1.přesunNa( 20, 30, auto41);
    }

    @Test
    public void pokus()
    {
        auto41.vpred();
        IO.čekej( 500);
        auto41.vpravoVbok();
        IO.čekej( 500);
        auto41.vpred();
        IO.čekej( 500);
        auto41.vpravoVbok();
        IO.čekej( 500);
        auto41.vpred();
        IO.čekej( 500);
        auto41.vpravoVbok();
        IO.čekej( 500);
        auto41.vpred();
        IO.čekej( 500);
        auto41.vlevoVbok();
    }
}






